package 力扣_简单题;

/**
 * @author 连安利
 * @version 1.0
 * @date 2021/3/20 15:12
 */
public class 整数反转 {
    //  难点：1、有个负号
//    2、溢出的判断
//    32位int最大：2147483647
//    最小：-2147483648
    public static void main(String[] args) {
        System.out.println(reverse(-214748364));
    }
    public static int reverse(int x) {
        int res = 0;
        while(x != 0){
            int pov = x % 10;
//            判断下列情况
//            如果res 大于 最大数除以10 ，那就不用再加pov了，一定溢出（负数则反之一样）
//            如果res 刚好等于 最大数除以10 ，那么只要pov不要大于最大数的最后一位，也就是7，那就不会溢出，负数的华，pov不要小于-8即可。
            if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && pov > 7)) return 0;
            if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && pov< -8)) return 0;
            res = res * 10 + pov;
            x /= 10;
        }
        return res;
    }
}
